Interbase a cestina v triggerech a procedurach
Otázka od: Petr Selinger
9. 12. 2002 12:56
Zdravim,
nevi nekdo, jak se da pouzit cestina v triggerech a procedurach?
Pokud si napr. nactu do lok. promenne data z tabulky obsahujici
hacky a carky, pak s touto promennou nemuzu pracovat.
Priklad:
- mam tabulku STRINGS, sloupce ID, TEXT (WIN250)
- vybiram radek s id 1, (pole TEXT obsahuje hacky, carky)
a pak chci k tomuto stringu neco pridat.
select TEXT from STRINGS where ID=1 into :SText;
SText = :SText || ' neco pridam.'; <- nahlasi chybu
Diky za kazdou radu,
Petr Selinger
IB6.02, D5SP2
Odpovedá: Kalhous Zdenek
9. 12. 2002 16:33
> nevi nekdo, jak se da pouzit cestina v triggerech a procedurach?
> Pokud si napr. nactu do lok. promenne data z tabulky obsahujici
> hacky a carky, pak s touto promennou nemuzu pracovat.
> - mam tabulku STRINGS, sloupce ID, TEXT (WIN250)
> - vybiram radek s id 1, (pole TEXT obsahuje hacky, carky)
> a pak chci k tomuto stringu neco pridat.
> select TEXT from STRINGS where ID=1 into :SText;
> SText = :SText || ' neco pridam.'; <- nahlasi chybu
Funguje treba toto: SText nacist do lokalni promenne ktera je
deklarovana s charsetem, to neco pridavane taky a pak to teprv
zretezit. Zhruba takto:
create procedure qpokus
returns
(qtext char(100) CHARACTER SET WIN1250)
as
declare variable pom char(50) CHARACTER SET
WIN1250;
declare variable pom1 char(50) CHARACTER SET
WIN1250;
begin
pom='ěčř';
for select TEXT from STRINGS into :pom1
do begin
qtext=pom1||pom;
suspend;
end
Odpovedá: Pavel Cisar
9. 12. 2002 19:24
Haj hou!
On 9 Dec 2002 at 12:20, Petr Selinger wrote:
> Zdravim,
> nevi nekdo, jak se da pouzit cestina v triggerech a procedurach?
> Pokud si napr. nactu do lok. promenne data z tabulky obsahujici
> hacky a carky, pak s touto promennou nemuzu pracovat.
>
> Priklad:
>
> - mam tabulku STRINGS, sloupce ID, TEXT (WIN250)
> - vybiram radek s id 1, (pole TEXT obsahuje hacky, carky)
> a pak chci k tomuto stringu neco pridat.
>
> select TEXT from STRINGS where ID=1 into :SText;
> SText = :SText || ' neco pridam.'; <- nahlasi chybu
Problem je v tom, ze literal neobsahuje informaci o znakove sade zatimco
promenna ano, a dojde k chybe konverze. Musis uvest znakovou sadu pro
znakovou konstantu, ktera ma standardne tvar _<jmeno sady v IB/FB>, napr.
_WIN1250. V tvem pripade by to tedy melo vypadat
select TEXT from STRINGS where ID=1 into :SText;
SText = :SText || _WIN1250 ' neco pridam.';
S pozdravem
Pavel Cisar
Mobil: 724 281429
http://www.ibphoenix.cz
Vse co potrebujete pro Firebird a InterBase
Odpovedá: Lebeda David
10. 12. 2002 7:47
> Musis uvest znakovou
> sadu pro znakovou konstantu, ktera ma standardne tvar _<jmeno sady v
> IB/FB>, napr. _WIN1250. V tvem pripade by to tedy melo vypadat
>
> select TEXT from STRINGS where ID=1 into :SText;
> SText = :SText || _WIN1250 ' neco pridam.';
Ahoj,
je tohle nekde zdokumentovano? Nevzpominam si, ze bych o tom nekde ani slysel,
natoz cetl.
David Lebeda
Odpovedá: Petr Selinger
10. 12. 2002 9:47
> Problem je v tom, ze literal neobsahuje informaci o znakove sade
> zatimco promenna ano, a dojde k chybe konverze. Musis uvest
> znakovou sadu pro znakovou konstantu, ktera ma standardne tvar
> _<jmeno sady v IB/FB>, napr.
> _WIN1250. V tvem pripade by to tedy melo vypadat
>
> select TEXT from STRINGS where ID=1 into :SText;
> SText = :SText || _WIN1250 ' neco pridam.';
Ahoj,
problem byl nakonec v tom, ze databaze byla vytvorena s nastavenym
charsetem Default, takze se implicitne pouzil tento charset i pro
lokalni promenne procedur a triggeru.
Pomohlo vyextrahovat metadata, dropnout databazi, opravit charset
a znovu ji vytvorit a naplnit. Pak uz vse fungovalo.
Ovsem nekdy to tak nejde, pak se hodi tvuj tip, diky.
Petr
Odpovedá: Pavel Cisar
10. 12. 2002 10:54
Haj hou!
On 10 Dec 2002 at 7:22, Lebeda David wrote:
> je tohle nekde zdokumentovano? Nevzpominam si, ze bych o tom nekde ani
slysel,
> natoz cetl.
Mno, melo by to byt v manualech k IB Kaztopadne to bude v nove knize
o IB a FB
S pozdravem
Pavel Cisar
Mobil: 724 281429
http://www.ibphoenix.cz
Vse co potrebujete pro Firebird a InterBase